import request from '@/utils/request'

/**
 * 系统管理API服务
 * 包含角色、权限、用户角色关联、角色权限关联等管理接口
 */

// ==================== 角色管理 ====================

/**
 * 获取角色分页列表
 * @param {Object} params 查询参数
 * @param {number} params.page 页码
 * @param {number} params.size 每页条数
 * @param {string} params.name 角色名称
 * @returns {Promise} 返回角色分页数据
 */
export const getRolePage = (params) => {
  return request({
    url: '/api/user/role/getRolePage',
    method: 'post',
    data: params
  })
}

/**
 * 获取所有角色列表
 * @returns {Promise} 返回角色列表
 */
export const getRoleList = () => {
  return request({
    url: '/api/user/role/getRoleList',
    method: 'post'
  })
}

/**
 * 根据ID获取角色详情
 * @param {number} id 角色ID
 * @returns {Promise} 返回角色详情
 */
export const getRoleById = (id) => {
  return request({
    url: '/api/user/role/getRoleById',
    method: 'post',
    params: { id }
  })
}

/**
 * 添加或更新角色
 * @param {Object} roleData 角色数据
 * @returns {Promise} 返回操作结果
 */
export const saveOrUpdateRole = (roleData) => {
  return request({
    url: '/api/user/role/addOrUpdateRole',
    method: 'post',
    data: roleData
  })
}

/**
 * 批量删除角色
 * @param {Array<number>} ids 角色ID数组
 * @returns {Promise} 返回操作结果
 */
export const deleteRoles = (ids) => {
  return request({
    url: '/api/user/role/deleteRoles',
    method: 'post',
    data: ids
  })
}

/**
 * 更新角色
 * @param {Object} roleData 角色数据
 * @returns {Promise} 返回操作结果
 */
export const updateRole = (roleData) => {
  return request({
    url: '/api/user/role/updateRole',
    method: 'post',
    data: roleData
  })
}

// ==================== 权限管理 ====================

/**
 * 获取权限分页列表
 * @param {Object} params 查询参数
 * @param {number} params.page 页码
 * @param {number} params.size 每页条数
 * @param {string} params.name 权限名称
 * @param {string} params.code 权限编码
 * @returns {Promise} 返回权限分页数据
 */
export const getPermissionPage = (params) => {
  return request({
    url: '/api/user/permission/getPermissionPage',
    method: 'post',
    data: params
  })
}

/**
 * 获取所有权限列表
 * @returns {Promise} 返回权限列表
 */
export const getPermissionList = () => {
  return request({
    url: '/api/user/permission/getPermissionList',
    method: 'post'
  })
}

/**
 * 根据ID获取权限详情
 * @param {string} id 权限ID
 * @returns {Promise} 返回权限详情
 */
export const getPermissionById = (id) => {
  return request({
    url: '/api/user/permission/getPermissionById',
    method: 'post',
    params: { id }
  })
}

/**
 * 添加或更新权限
 * @param {Object} permissionData 权限数据
 * @returns {Promise} 返回操作结果
 */
export const saveOrUpdatePermission = (permissionData) => {
  return request({
    url: '/api/user/permission/addOrUpdatePermission',
    method: 'post',
    data: permissionData
  })
}

/**
 * 批量删除权限
 * @param {Array<string>} ids 权限ID数组
 * @returns {Promise} 返回操作结果
 */
export const deletePermissions = (ids) => {
  return request({
    url: '/api/user/permission/deletePermissions',
    method: 'post',
    data: ids
  })
}

// ==================== 角色权限关联管理 ====================

/**
 * 获取角色权限关联分页列表
 * @param {Object} params 查询参数
 * @param {number} params.page 页码
 * @param {number} params.size 每页条数
 * @param {number} params.roleId 角色ID
 * @param {string} params.permissionId 权限ID
 * @returns {Promise} 返回角色权限关联分页数据
 */
export const getRolePermissionPage = (params) => {
  return request({
    url: '/api/user/rolePermission/getRolePermissionPage',
    method: 'post',
    data: params
  })
}

/**
 * 添加或更新角色权限关联
 * @param {Object} rolePermissionData 角色权限关联数据
 * @returns {Promise} 返回操作结果
 */
export const saveOrUpdateRolePermission = (rolePermissionData) => {
  return request({
    url: '/api/user/rolePermission/addOrUpdateRolePermission',
    method: 'post',
    data: rolePermissionData
  })
}

/**
 * 批量删除角色权限关联
 * @param {Array<string>} ids 关联ID数组
 * @returns {Promise} 返回操作结果
 */
export const deleteRolePermissions = (ids) => {
  return request({
    url: '/api/user/rolePermission/deleteRolePermissions',
    method: 'post',
    data: ids
  })
}

/**
 * 获取角色的所有权限
 * @param {number} roleId 角色ID
 * @returns {Promise} 返回权限列表
 */
export const getPermissionsByRoleId = (roleId) => {
  return request({
    url: '/api/user/rolePermission/getPermissionsByRoleId',
    method: 'post',
    params: { roleId }
  })
}

/**
 * 设置角色的权限
 * @param {number} roleId 角色ID
 * @param {Array<string>} permissionIds 权限ID数组
 * @returns {Promise} 返回操作结果
 */
export const setRolePermissions = (roleId, permissionIds) => {
  return request({
    url: '/api/user/rolePermission/setRolePermissions',
    method: 'post',
    data: { roleId, permissionIds }
  })
}

// ==================== 用户角色关联管理 ====================

/**
 * 获取用户角色关联分页列表
 * @param {Object} params 查询参数
 * @param {number} params.page 页码
 * @param {number} params.size 每页条数
 * @param {number} params.userId 用户ID
 * @param {number} params.roleId 角色ID
 * @returns {Promise} 返回用户角色关联分页数据
 */
export const getUserRolePage = (params) => {
  return request({
    url: '/api/user/userRole/getUserRolePage',
    method: 'post',
    data: params
  })
}

/**
 * 添加或更新用户角色关联
 * @param {Object} userRoleData 用户角色关联数据
 * @returns {Promise} 返回操作结果
 */
export const saveOrUpdateUserRole = (userRoleData) => {
  return request({
    url: '/api/user/userRole/addOrUpdateUserRole',
    method: 'post',
    data: userRoleData
  })
}

/**
 * 批量删除用户角色关联
 * @param {Array<string>} ids 关联ID数组
 * @returns {Promise} 返回操作结果
 */
export const deleteUserRoles = (ids) => {
  return request({
    url: '/api/user/userRole/deleteUserRoles',
    method: 'post',
    data: ids
  })
}

/**
 * 获取用户的所有角色
 * @param {number} userId 用户ID
 * @returns {Promise} 返回角色列表
 */
export const getRolesByUserId = (userId) => {
  return request({
    url: '/api/user/userRole/getRolesByUserId',
    method: 'post',
    params: { userId }
  })
}

/**
 * 设置用户的角色
 * @param {number} userId 用户ID
 * @param {Array<number>} roleIds 角色ID数组
 * @returns {Promise} 返回操作结果
 */
export const setUserRoles = (userId, roleIds) => {
  return request({
    url: '/api/user/userRole/setUserRoles',
    method: 'post',
    data: { userId, roleIds }
  })
}

// ==================== 系统监控 ====================

/**
 * 获取系统信息
 * @returns {Promise} 返回系统信息
 */
export const getSystemInfo = () => {
  return request({
    url: '/api/system/info',
    method: 'get'
  })
}

/**
 * 获取系统日志
 * @param {Object} params 查询参数
 * @returns {Promise} 返回系统日志
 */
export const getSystemLogs = (params) => {
  return request({
    url: '/api/system/logs',
    method: 'get',
    params
  })
}

// ==================== 系统日志管理 ====================

/**
 * 获取系统日志分页列表
 * @param {Object} params 查询参数
 * @param {number} params.page 页码
 * @param {number} params.size 每页条数
 * @param {string} params.level 日志级别
 * @param {string} params.operationType 操作类型
 * @param {string} params.username 操作用户
 * @param {string} params.startDate 开始日期
 * @param {string} params.endDate 结束日期
 * @returns {Promise} 返回日志分页数据
 */
export const getSystemLogsPage = (params) => {
  return request({
    url: '/api/system/logs/page',
    method: 'post',
    data: params
  })
}

/**
 * 删除系统日志
 * @param {Array<string>} ids 日志ID数组
 * @returns {Promise} 返回操作结果
 */
export const deleteSystemLogs = (ids) => {
  return request({
    url: '/api/system/logs/delete',
    method: 'post',
    data: ids
  })
}

/**
 * 导出系统日志
 * @param {Object} params 查询参数
 * @returns {Promise} 返回导出的文件流
 */
export const exportSystemLogs = (params) => {
  return request({
    url: '/api/system/logs/export',
    method: 'post',
    data: params,
    responseType: 'blob'
  })
}

/**
 * 清理旧日志
 * @param {number} days 清理多少天前的日志
 * @returns {Promise} 返回操作结果
 */
export const clearOldLogs = (days) => {
  return request({
    url: '/api/system/logs/clear',
    method: 'post',
    params: { days }
  })
}

// ==================== 数据字典管理 ====================

/**
 * 获取数据字典分页列表
 * @param {Object} params 查询参数
 * @param {number} params.page 页码
 * @param {number} params.size 每页条数
 * @param {string} params.dictName 字典名称
 * @param {string} params.dictCode 字典编码
 * @returns {Promise} 返回字典分页数据
 */
export const getDictPage = (params) => {
  return request({
    url: '/api/system/dict/page',
    method: 'post',
    data: params
  })
}

/**
 * 根据ID获取字典详情
 * @param {string} id 字典ID
 * @returns {Promise} 返回字典详情
 */
export const getDictById = (id) => {
  return request({
    url: '/api/system/dict/getById',
    method: 'post',
    params: { id }
  })
}

/**
 * 添加或更新数据字典
 * @param {Object} dictData 字典数据
 * @returns {Promise} 返回操作结果
 */
export const saveOrUpdateDict = (dictData) => {
  return request({
    url: '/api/system/dict/addOrUpdate',
    method: 'post',
    data: dictData
  })
}

/**
 * 批量删除数据字典
 * @param {Array<string>} ids 字典ID数组
 * @returns {Promise} 返回操作结果
 */
export const deleteDict = (ids) => {
  return request({
    url: '/api/system/dict/delete',
    method: 'post',
    data: ids
  })
}

// ==================== 字典项管理 ====================

/**
 * 获取字典项分页列表
 * @param {Object} params 查询参数
 * @param {number} params.page 页码
 * @param {number} params.size 每页条数
 * @param {string} params.dictCode 字典编码
 * @param {string} params.itemLabel 字典项标签
 * @param {string} params.itemValue 字典项值
 * @returns {Promise} 返回字典项分页数据
 */
export const getDictDataPage = (params) => {
  return request({
    url: '/api/system/dict/data/page',
    method: 'post',
    data: params
  })
}

/**
 * 根据ID获取字典项详情
 * @param {string} id 字典项ID
 * @returns {Promise} 返回字典项详情
 */
export const getDictDataById = (id) => {
  return request({
    url: '/api/system/dict/data/getById',
    method: 'post',
    params: { id }
  })
}

/**
 * 根据字典编码获取所有字典项
 * @param {string} dictCode 字典编码
 * @returns {Promise} 返回字典项列表
 */
export const getDictDataByCode = (dictCode) => {
  return request({
    url: '/api/system/dict/data/getByDictCode',
    method: 'post',
    params: { dictCode }
  })
}

/**
 * 添加或更新字典项
 * @param {Object} dictData 字典项数据
 * @returns {Promise} 返回操作结果
 */
export const saveOrUpdateDictData = (dictData) => {
  return request({
    url: '/api/system/dict/data/addOrUpdate',
    method: 'post',
    data: dictData
  })
}

/**
 * 批量删除字典项
 * @param {Array<string>} ids 字典项ID数组
 * @returns {Promise} 返回操作结果
 */
export const deleteDictData = (ids) => {
  return request({
    url: '/api/system/dict/data/delete',
    method: 'post',
    data: ids
  })
}

// ==================== 系统配置管理 ====================

/**
 * 获取系统配置
 * @param {string} configType 配置类型
 * @returns {Promise} 返回配置数据
 */
export const getSystemConfig = (configType) => {
  return request({
    url: '/api/system/config/get',
    method: 'post',
    params: { configType }
  })
}

/**
 * 保存系统配置
 * @param {string} configType 配置类型
 * @param {Object} configData 配置数据
 * @returns {Promise} 返回操作结果
 */
export const saveSystemConfig = (configType, configData) => {
  return request({
    url: '/api/system/config/save',
    method: 'post',
    data: { configType, configData }
  })
}

/**
 * 测试邮件配置
 * @param {Object} emailConfig 邮件配置
 * @returns {Promise} 返回测试结果
 */
export const testEmailConfig = (emailConfig) => {
  return request({
    url: '/api/system/config/email/test',
    method: 'post',
    data: emailConfig
  })
}

/**
 * 上传系统Logo
 * @param {FormData} formData 包含Logo文件的表单数据
 * @returns {Promise} 返回上传结果
 */
export const uploadSystemLogo = (formData) => {
  return request({
    url: '/api/system/config/logo/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

// ==================== 公告管理 ====================

/**
 * 获取公告分页列表
 * @param {Object} params 查询参数
 * @returns {Promise} 返回公告分页数据
 */
export const getNoticePage = (params) => {
  return request({
    url: '/api/system/notice/page',
    method: 'post',
    data: params
  })
}

/**
 * 根据ID获取公告详情
 * @param {string} id 公告ID
 * @returns {Promise} 返回公告详情
 */
export const getNoticeById = (id) => {
  return request({
    url: '/api/system/notice/getById',
    method: 'post',
    params: { id }
  })
}

/**
 * 添加或更新公告
 * @param {Object} noticeData 公告数据
 * @returns {Promise} 返回操作结果
 */
export const saveOrUpdateNotice = (noticeData) => {
  return request({
    url: '/api/system/notice/addOrUpdate',
    method: 'post',
    data: noticeData
  })
}

/**
 * 批量删除公告
 * @param {Array<string>} ids 公告ID数组
 * @returns {Promise} 返回操作结果
 */
export const deleteNotice = (ids) => {
  return request({
    url: '/api/system/notice/delete',
    method: 'post',
    data: ids
  })
}

/**
 * 发布公告
 * @param {Array<string>} ids 公告ID数组
 * @returns {Promise} 返回操作结果
 */
export const publishNotice = (ids) => {
  return request({
    url: '/api/system/notice/publish',
    method: 'post',
    data: ids
  })
}

/**
 * 下线公告
 * @param {Array<string>} ids 公告ID数组
 * @returns {Promise} 返回操作结果
 */
export const offlineNotice = (ids) => {
  return request({
    url: '/api/system/notice/offline',
    method: 'post',
    data: ids
  })
}

/**
 * 上传公告附件
 * @param {FormData} formData 包含附件文件的表单数据
 * @returns {Promise} 返回上传结果
 */
export const uploadNoticeAttachment = (formData) => {
  return request({
    url: '/api/system/notice/attachment/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}